/**
 * outsider.com.cn Inc.
 * Copyright (c) 2011-2022 All Rights Reserved.
 */
package com.yuanmeng.common.core.handler;

import java.util.List;
import java.util.Objects;

import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import com.yuanmeng.common.core.enums.BooleanFlagEnum;
import com.yuanmeng.common.core.enums.ErrorCodeEnum;
import com.yuanmeng.common.core.exception.ServiceException;

/**
 * @author outsider
 * @version Id: ObjectValidateHandler.java, v 0.1 2022/5/25 10:55 outsider Exp $$
 */
public class ObjectValidateHandler {
    /**
     * 当前对象不存在异常处理器
     * @param obj           当前对象
     * @param errorCodeEnum 异常信息
     */
    public static void objectNotExistErrorHandler(Object obj, ErrorCodeEnum errorCodeEnum) {
        if (Objects.isNull(obj)) {
            throw new ServiceException(errorCodeEnum.getMessage());
        }
    }

    /**
     * 当前对象不存在异常处理器
     * @param obj           当前对象
     * @param message 异常信息
     */
    public static void objectNotExistErrorHandler(Object obj, String message) {
        if (Objects.isNull(obj)) {
            throw new ServiceException(message);
        }
    }

    /**
     * 当前对象已存在异常处理器
     * @param obj           当前对象
     * @param errorCodeEnum 异常信息
     */
    public static void objectAlreadyExistErrorHandler(Object obj, ErrorCodeEnum errorCodeEnum) {
        if (!Objects.isNull(obj)) {
            throw new ServiceException(errorCodeEnum.getMessage());
        }
    }

    /**
     * 当前对象列表已存在异常处理器
     * @param objectList    当前对象列表
     * @param errorCodeEnum 异常信息
     */
    public static void objectListAlreadyExistErrorHandler(List objectList,
                                                          ErrorCodeEnum errorCodeEnum) {
        if (!CollectionUtils.isEmpty(objectList)) {
            throw new ServiceException(errorCodeEnum.getMessage());
        }
    }

    /**
     * 当前对象列表不存在异常处理器
     * @param objectList    当前对象列表
     * @param errorCodeEnum 异常信息
     */
    public static void objectListNotExistErrorHandler(List objectList,
                                                      ErrorCodeEnum errorCodeEnum) {

        if (CollectionUtils.isEmpty(objectList)) {
            throw new ServiceException(errorCodeEnum.getMessage());
        }
    }

    /**
     * 当前对象列表不存在异常处理器
     * @param object    当前对象列表
     */
    public static Boolean objectIsThereExistHandler(Object object) {
        return !Objects.isNull(object);
    }

    /**
     * boolean 参数校验
     * @param flag
     */
    public static void booleanFlagValidate(String flag) {
        if (!BooleanFlagEnum.TRUE.getCode().equals(flag)
            && !BooleanFlagEnum.FALSE.getCode().equals(flag)) {
            throw new ServiceException(ErrorCodeEnum.PARAMETER_VALID_NOT_PASS);
        }
    }

    /**
     * 数据库操作异常校验
     * @param i
     */
    public static void databaseOperatorValidate(int i) {
        if (1 != i) {
            throw new ServiceException(ErrorCodeEnum.DATABASE_OPERATION_ERROR);
        }
    }

    /**
     * 请求参数为空校验
     * @param obj
     */
    public static void requestParamWithNull(Object obj, String errorMessage) {
        if (ObjectUtils.isEmpty(obj)) {
            throw new ServiceException(errorMessage);
        }
    }
}